Google Guava লাইব্রেরি Java-তে Collections এবং Utilities ব্যবহারে সুবিধা প্রদান করে। Guava-এর জন্য Unit Testing করায় নিশ্চিত হওয়া যায় যে কোড সঠিকভাবে কাজ করছে এবং প্রত্যাশিত ফলাফল দিচ্ছে। নিচে Guava-ভিত্তিক Unit Testing-এর কিছু গুরুত্বপূর্ণ টেকনিক আলোচনা করা হলো:
1. Guava Collections-এর জন্য Unit Testing
Immutable Collections Test
Guava-এর ImmutableList, ImmutableMap, ইত্যাদি নিশ্চিত করে যে এগুলো পরিবর্তনযোগ্য নয়। Unit Test দিয়ে এটি যাচাই করা যেতে পারে।
import com.google.common.collect.ImmutableList;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class GuavaImmutableTest {
@Test
void testImmutableList() {
ImmutableList<String> list = ImmutableList.of("A", "B", "C");
// নিশ্চিত করুন লিস্টে ডেটা সঠিক
assertEquals(3, list.size());
assertTrue(list.contains("A"));
// পরিবর্তন করার চেষ্টা করলে Exception হবে
assertThrows(UnsupportedOperationException.class, () -> list.add("D"));
}
}
Multimap Testing
Guava-এর Multimap একাধিক ভ্যালুকে একক কী-তে ম্যাপ করতে সক্ষম। এটি সঠিকভাবে কাজ করছে কি না তা নিশ্চিত করতে Unit Test ব্যবহার করা হয়।
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class GuavaMultimapTest {
@Test
void testMultimap() {
Multimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("fruit", "apple");
multimap.put("fruit", "orange");
multimap.put("vegetable", "carrot");
assertEquals(2, multimap.get("fruit").size());
assertTrue(multimap.get("fruit").contains("apple"));
assertEquals(1, multimap.get("vegetable").size());
}
}
2. Caching Features-এর Unit Testing
Guava-এর Cache API ব্যবহার করে ডেটা ক্যাশিং কার্যকারিতা নিশ্চিত করার জন্য Unit Test প্রয়োজন।
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import org.junit.jupiter.api.Test;
import java.util.concurrent.TimeUnit;
import static org.junit.jupiter.api.Assertions.*;
class GuavaCacheTest {
@Test
void testCache() throws InterruptedException {
Cache<String, String> cache = CacheBuilder.newBuilder()
.expireAfterWrite(1, TimeUnit.SECONDS)
.build();
cache.put("key", "value");
assertEquals("value", cache.getIfPresent("key"));
// ক্যাশ মেয়াদ শেষ হওয়ার পরে পরীক্ষা
Thread.sleep(1100);
assertNull(cache.getIfPresent("key"));
}
}
3. Optional Testing
Guava-এর Optional NullPointerException প্রতিরোধ করতে ব্যবহৃত হয়। এটি সঠিকভাবে কাজ করছে কি না তা Unit Test-এ যাচাই করা হয়।
import com.google.common.base.Optional;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class GuavaOptionalTest {
@Test
void testOptional() {
Optional<String> present = Optional.of("Hello");
Optional<String> absent = Optional.absent();
assertTrue(present.isPresent());
assertEquals("Hello", present.get());
assertFalse(absent.isPresent());
assertThrows(IllegalStateException.class, absent::get);
}
}
4. Preconditions Testing
Guava-এর Preconditions ক্লাস Argument Validation-এর জন্য ব্যবহৃত হয়। এটি Unit Test দিয়ে নিশ্চিত করা যায়।
import com.google.common.base.Preconditions;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class GuavaPreconditionsTest {
@Test
void testPreconditions() {
int x = 10;
int y = 0;
// শর্ত সঠিক থাকলে চলে যাবে
Preconditions.checkArgument(x > 0);
// শর্ত ভঙ্গ হলে Exception হবে
assertThrows(IllegalArgumentException.class, () -> Preconditions.checkArgument(y > 0));
}
}
5. Utility Methods Testing
Guava-এর বিভিন্ন Utility Methods যেমন Strings, Lists, ইত্যাদির জন্য Unit Testing করা হয়।
import com.google.common.base.Strings;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class GuavaUtilityTest {
@Test
void testStrings() {
assertTrue(Strings.isNullOrEmpty(null));
assertTrue(Strings.isNullOrEmpty(""));
assertFalse(Strings.isNullOrEmpty("text"));
assertEquals("0001", Strings.padStart("1", 4, '0'));
}
}
6. Parameterized Testing
JUnit-এর Parameterized Testing ব্যবহার করে Guava-এর বিভিন্ন ইনপুট ও আউটপুট যাচাই করা যায়।
import com.google.common.collect.ImmutableList;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.junit.jupiter.api.Assertions.*;
class GuavaParameterizedTest {
@ParameterizedTest
@ValueSource(strings = {"A", "B", "C"})
void testImmutableListContains(String input) {
ImmutableList<String> list = ImmutableList.of("A", "B", "C");
assertTrue(list.contains(input));
}
}
7. Exception Handling Testing
Guava ব্যবহারকালে যে Exception হতে পারে তা সঠিকভাবে Test করতে হবে।
import com.google.common.collect.ImmutableList;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class GuavaExceptionTest {
@Test
void testException() {
ImmutableList<String> list = ImmutableList.of("A", "B", "C");
assertThrows(IndexOutOfBoundsException.class, () -> list.get(5));
}
}
Guava-এর Unit Testing করার সময় JUnit বা TestNG-এর মতো ফ্রেমওয়ার্ক ব্যবহার করে Test Case লিখতে পারেন। এই টেকনিকগুলো ব্যবহার করে আপনি Guava ভিত্তিক কোডের কার্যকারিতা এবং স্থায়িত্ব নিশ্চিত করতে পারবেন।
Read more